home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 1 Issue 2
/
PDCD-1 - Issue 02.iso
/
_utilities
/
utilities
/
004
/
_quickcrt
/
!QuickCrt
/
s
/
QuickCaret
Wrap
Text File
|
1993-06-12
|
4KB
|
149 lines
; s.QuickCaret
;
; QuickCaret written by Richard Millican...
; Ported to assembler by Tackline (aka Thomas Hawtin)
; Version 1.01 (12/06/93)
Xbit * &20000
OS_GetEnv * &00010
OS_ExitAndDie * &00050
XOS_Module * &0001E :OR: Xbit
OS_ReadMonotonicTime * &00042
XWimp_Initialise * &400C0 :OR: Xbit
Wimp_PollIdle * &400E1
Wimp_GetPointerInfo * &400CF
Wimp_SetCaretPosition * &400D2
Wimp_GetCaretPosition * &400D3
Wimp_CloseDown * &400DD
wimp_ESEND * 17
wimp_ESENDWANTACK * 18
wimp_msghdr_action * 16
wimp_MCLOSEDOWN * 0
wimp_mousestr_whandle * 12
wimp_caretstr_w * 0
Module_Claim * 6
r0 RN 0
r1 RN 1
r2 RN 2
r3 RN 3
r4 RN 4
r5 RN 5
r12 RN 12
sp RN 13
lr RN 14
pc RN 15
taskH * &100
wrkSize * &104
pollInterval * 10 ; cs polling interval
; AREA |main|, CODE, READONLY
Module_BaseAddr
DCD RM_Start -Module_BaseAddr
DCD RM_Init -Module_BaseAddr
DCD RM_Die -Module_BaseAddr
DCD RM_Service -Module_BaseAddr
DCD RM_Title -Module_BaseAddr
DCD RM_HelpStr -Module_BaseAddr
DCD RM_HC_Table-Module_BaseAddr
RM_Init
STMFD sp!, {lr}
LDR r0, [r12]
TEQ r0, #0 ; [r12] = 0 iff re-init
MOVEQ r0, #Module_Claim ; w/s
MOVEQ r3, #wrkSize ; size of claim
SWIEQ XOS_Module
MOVEQ r0, r2
STREQ r0, [r12] ; store ptr in private word
MOV r1, #0 ; w/s ptr
STR r1, [r0, #taskH] ; reset task handle
LDMFD sp!, {pc}
RM_Die
STMFD sp!, {lr}
LDR r12, [r12] ; w/s ptr
LDR r0, [r12, #taskH] ; get task handle
TEQ r0, #0 ; already running iff != 0
LDRNE r1, taskCode
SWINE Wimp_CloseDown ; shut down
MOVNE r0, #0 ; mark inactive
STRNE r0, [r12, #taskH]
LDMFD sp!, {pc}
RM_Service * Module_BaseAddr
RM_HC_Table * Module_BaseAddr
RM_Start
LDR sp, [r12] ; w/s ptr
ADD sp, sp, #4 ; single entry stack
BL RM_Die
LDR r0, =200 ; Minimum Risc OS 2.00
LDR r1, taskCode
ADR r2, RM_Title
SWI XWimp_Initialise
ADRVS r3, RM_Title
SWIVS OS_ExitAndDie
STR r1, [r12, #taskH]
lp
SWI OS_ReadMonotonicTime
ADD r2, r0, #pollInterval ; centiseconds
MOV r0, #0
MOV r1, r12
SWI Wimp_PollIdle
; check for close down message
CMP r0, #wimp_ESEND
CMPNE r0, #wimp_ESENDWANTACK
LDREQ r0, [r12, #wimp_msghdr_action]
CMPEQ r0, #wimp_MCLOSEDOWN
ADREQ r3, RM_Title
SWIEQ OS_ExitAndDie
; see if pointer and caret are in different window
SWI Wimp_GetCaretPosition
LDR r5, [r12, #wimp_caretstr_w]
SWI Wimp_GetPointerInfo ; r1 = r12
LDR r0, [r12, #wimp_mousestr_whandle]
TEQ r0, r5
; move caret
; r0 = whandle
MOVNE r1, #-1 ; no icon handle
MOVNE r2, #0 ; off (0,0)
MOVNE r3, #0
MOVNE r4, #-1 ; no height/flags
MOVNE r5, #-1 ; no index into string
SWINE Wimp_SetCaretPosition
B lp
taskCode
= "TASK"
RM_Title
= "QuickCaret\0"
RM_HelpStr
= "QuickCaret\t1.01 (12 Jun 1993)\0"
END